home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / ctutor.exe / TEXT / CHAP14.TXT < prev    next >
Text File  |  1994-05-15  |  17KB  |  348 lines

  1.  
  2.  
  3.  
  4.                                                        Chapter 14
  5.                                                  EXAMPLE PROGRAMS
  6.  
  7. WHY THIS CHAPTER?
  8. -----------------------------------------------------------------
  9. Although every program in this tutorial has been a complete 
  10. program, each one has also been a very small program intended to 
  11. teach you a very specific principle of programming in C.  It 
  12. would do you a disservice to leave you at that point without 
  13. introducing you to a few larger programs to illustrate how to put 
  14. together the constructs you have learned to create a major 
  15. program.  This chapter contains four programs of increasing 
  16. complexity, each designed to take you into a higher plateau of 
  17. programming, and each designed to be useful to you in some way.
  18.  
  19. This course was originally written for use on an IBM-PC or 
  20. compatible running the PC-DOS operating system.  Some of the 
  21. example programs in this chapter will not compile and execute 
  22. properly if you are using some other computer or operating 
  23. system, but the techniques may still be useful to you.  It would 
  24. be advantageous to you to spend some time studying these programs 
  25. regardless of what computer you are using.
  26.  
  27. DOSEX will illustrate how to make DOS system calls and will teach 
  28. you, through self-study, how the system responds to the keyboard.  
  29. WHATNEXT reads commands input on the command line and will aid 
  30. you in setting up a variable batch file, one that requests an 
  31. operator input and responds to the input by branching to a 
  32. different part of the batch file.
  33.  
  34. LIST is the C source code for the program that you used to print 
  35. out the C source files when you began studying C with the aid of 
  36. this tutorial.  Finally we come to VC, the Visual Calculator, 
  37. which you should find to be a useful program even if you don't 
  38. study its source code.  VC uses most of the programming 
  39. techniques we have studied in this course and a few that we never 
  40. even mentioned such as separately compiled subroutines.
  41.  
  42. We will examine the example programs one at a time.  However, we 
  43. will not give a complete explanation of any of them because you 
  44. have been studying C for some time now and should be able to read 
  45. and understand the details of these programs on your own.
  46.  
  47.  
  48. DOSEX.C - The DOS Example Program
  49. -----------------------------------------------------------------
  50. The copy of DOS that you received with your IBM-PC or compatible 
  51. has about 80 internal DOS calls that you can use as a programmer 
  52. to control your peripheral devices and read information or status 
  53. from them.  Some of the earlier IBM DOS manuals, DOS 2.0 and 
  54. earlier, have these calls listed in the back of the manual along 
  55. with how to use them.  Most of the manuals supplied with 
  56.  
  57.                                                         Page 14-1
  58.  
  59.                                     Chapter 14 - Example Programs
  60.  
  61. compatible computers make no mention of the DOS calls even though 
  62. they are extremely useful.  These calls can be accessed from 
  63. nearly any programming language but they do require some initial 
  64. study to learn how to use them.  This program is intended to aid 
  65. you in this study.
  66.  
  67. Display the program on your monitor or print    =================
  68. it out for reference.  It is merely a loop           DOSEX.C
  69. watching for a keyboard input or a change in    =================
  70. the time.  If either happens, it reacts 
  71. accordingly.  In line 32, the function kbhit() returns a value of 
  72. 1 if a key has been hit but not yet read from the input buffer by 
  73. the program. 
  74.  
  75. Look at the function named get_time() for an example of a DOS 
  76. call.  An interrupt 21(hex) is executed after setting the AH 
  77. register to 2C(hex) = 44(decimal).  The time is returned in the 
  78. CH, CL, and DH registers.  Refer to the DOS call definitions in 
  79. your copy of DOS.  If the definitions are not included there, 
  80. Peter Norton's book, "Programmers Guide to the IBM PC" is 
  81. recommended as a good reference manual for these calls and many 
  82. other programming techniques.  If you read your documentation, 
  83. you will probably find many useful functions available with your 
  84. compiler that are included as a convenience for you by your 
  85. compiler writer. 
  86.  
  87. Another useful function is the pos_cursor() function that 
  88. positions the cursor anywhere on the monitor that you desire by 
  89. using a DOS interrupt.  In this case, the interrupt used is 
  90. 10(hex) which is the general monitor interrupt.  This particular 
  91. service is number 2 of about 10 different monitor services 
  92. available.  This function is included here as another example 
  93. to you.
  94.  
  95. The next function, service number 6 of interrupt 10(hex) is the 
  96. window scroll service as implemented in the function 
  97. scroll_window().  This function should be self explanatory 
  98. following the previous discussion of this example program.
  99.                                  
  100. In the DOSEX.C program, the cursor is positioned and some data is 
  101. output to the monitor, then the cursor is hidden by moving it to 
  102. line 26 which is not displayed.  After you compile and run the 
  103. program, you will notice that the cursor is not visible on the 
  104. monitor.  This can be done in any program, but be sure to return 
  105. the cursor to any position where it is in view before returning 
  106. control to the DOS operating system.  DOS does not like to have a 
  107. hidden cursor and may do some strange things if it is hidden.
  108.  
  109. Some time spent studying this program will be valuable to you as 
  110. it will reveal how the keyboard data is input to the computer.  
  111. Especially of importance is how the special keys such as function 
  112. keys, arrows, etc. are handled.  Also note that this program uses 
  113. full prototype checking and is a good example of how to use it.  
  114.  
  115.                                                         Page 14-2
  116.  
  117.                                     Chapter 14 - Example Programs
  118.  
  119. It is a good example of the modern method of function 
  120. definitions.
  121.  
  122.  
  123. WHATNEXT.C - The Batch File Interrogator
  124. -----------------------------------------------------------------
  125. This is an example of how to read the data on    ================
  126. the command line following the function call.       WHATNEXT.C
  127. Notice that there are two variables listed       ================
  128. within the parentheses following the main() 
  129. call.  The first variable is a count of words in the entire 
  130. command line including the command itself and the second variable 
  131. is a pointer to an array of pointers defining the actual words on 
  132. the command line.  The names argc and argv are used by nearly all 
  133. C programmers for these two variables.
  134.  
  135. When this program is executed, the question on the command line, 
  136. made up of some number of words, is displayed on the monitor and 
  137. the program waits for the operator to hit a key.  If the key hit 
  138. is one of those in the last word of the command line, the 
  139. position number of the character within the group is returned to 
  140. the program where it can be tested with the ERRORLEVEL command 
  141. in the batch file.  You could use this technique to create a 
  142. variable AUTOEXEC.BAT file or any other batch file can use this 
  143. for a many way branch.  Compile and run this file with TEST.BAT 
  144. for an example of how it works in practice.  You may find this 
  145. technique useful in one of your batch files and you will almost 
  146. certainly need to read in the command line parameters someday.
  147.  
  148. An interesting alternative would be for you to write a program 
  149. named WOULD.C that would return a 1 if a Y or y were typed and a 
  150. zero if any other key were hit.  Then your batch file could have 
  151. a line such as;
  152.  
  153.    Would you like to use the alternative method? (Y/N)
  154.  
  155. DOS will use Would as the program name and ignore the rest of the 
  156. statement except for displaying it on the screen.  The user can 
  157. then respond to the question on the monitor with a single keyhit.  
  158. Your batch file would then respond to the 1 or 0 returned and 
  159. either run the alternative part of the batch file or the primary 
  160. part whatever each part was.
  161.  
  162.    Would you like to use primary? (Y/N)
  163.    IF ERRORLEVEL 1 GOTO PRIMARY
  164.    (secondary commands)
  165.    GOTO DONE
  166.    :PRIMARY
  167.    (primary commands)
  168.    :DONE
  169.  
  170.  
  171.  
  172.  
  173.                                                         Page 14-3
  174.  
  175.                                     Chapter 14 - Example Programs
  176.  
  177. LIST.C - The Program Lister
  178. -----------------------------------------------------------------
  179. This program is actually composed of two       ==================
  180. files, LIST.C and LISTF.C that must be               LIST.C
  181. separately compiled and linked together        ==================
  182. with your linker.  There is nothing new 
  183. here and you should have no trouble compiling and linking this 
  184. program by reading the documentation supplied with your C 
  185. compiler.
  186.  
  187. Notice the simplicity of the program named LIST.C.  It can be 
  188. read and understood completely in a very short period of time.  
  189. Unfortunately, it doesn't do very much, because it passes the 
  190. work off to the functions.  Since it breaks the overall problem 
  191. into many smaller problems, it makes it much simpler to 
  192. understand exactly what is happening.  You should have no problem 
  193. understanding this file.  If you wish to understand exactly what 
  194. each of the functions do, you can review them in the LISTF.C 
  195. file, and its accompanying LISTF.H header file.
  196.  
  197. Pay particular attention to the organization of the LISTF.H file 
  198. and the way it is associated with the LISTF.C file.  Any program 
  199. that wishes to use the services provided by the LISTF.C file can 
  200. #include the LISTF.H header file since it has prototypes for all 
  201. of the functions, and all #defines that may be needed for use 
  202. with the file.  It would be a good plan for you to begin dividing 
  203. your source into two files in this manner for two reasons.  
  204. First, it is good programming practice, and secondly, it tends to 
  205. look like the style used in object oriented programming.  Because 
  206. object oriented programming does so much for software 
  207. development, it must be considered as a viable option for the 
  208. future, and you should begin leaning in its direction.
  209.  
  210. It would be to your advantage to compile, link, and run this 
  211. program to prepare you for the next program which is composed of 
  212. 6 separate files which must all work together.
  213.  
  214.  
  215. VC.C - The Visual Calculator
  216. -----------------------------------------------------------------
  217. This program finally ties nearly everything      ================
  218. together because it uses nearly every concept          VC.C
  219. covered in the entire Coronado Enterprises C     ================
  220. tutorial.  It is so big that I will not even 
  221. try to cover the finer points of its operation.  Only a few of 
  222. the more important points will be discussed.
  223.  
  224. The first thing you should do is go through      ================
  225. the tutorial for VC included in the file              VC.DOC
  226. VC.DOC.  There are several dozen steps for       ================
  227. you to execute, with each step illustrating 
  228. some aspect of the Visual Calculator.  You will get a good feel 
  229. for what it is capable of doing and make your study of the source 
  230.  
  231.                                                         Page 14-4
  232.  
  233.                                     Chapter 14 - Example Programs
  234.  
  235. code very profitable.  In addition, you will probably find many 
  236. ways to use the Visual Calculator to solve problems involving 
  237. calculations where the simplicity of the problem at hand does not 
  238. warrant writing a program.
  239.  
  240. Notice that the structure definitions, used in the various parts 
  241. of the program, are defined in the file VC.H.  During program 
  242. development, if it became necessary to change one of the 
  243. structures slightly, it was not necessary to change it in several 
  244. different files.  Only the file VC.H required modification, and 
  245. since it was then included in the other source files they were 
  246. all automatically updated.  Notice that the transcript data is 
  247. stored in a doubly linked list with the data itself being stored 
  248. in a separate dynamically allocated character string.  This line 
  249. is pointed to by the pointer lineloc.
  250.  
  251. For ease of development, the similar functions were grouped 
  252. together and compiled separately.  Thus, all of the functions 
  253. involving the monitor were included in the file named VIDEO.C, 
  254. and all of the functions involving the data storage were grouped 
  255. into the FILE.C collection.  Dividing your program in a way 
  256. similar to this should simplify debugging and future 
  257. modifications. 
  258.  
  259. Two styles of coding are presented in this program.  VIDEO.C 
  260. contains 18 functions which may be called by other parts of the 
  261. program, and all prototypes are stored in VIDEO.H in the manner 
  262. defined for the last example program, LIST.C.  The other files 
  263. have their prototypes all gathered together in VC.H so that 
  264. including this file brings all prototypes into the including 
  265. program.  The first method is the preferred method, but either 
  266. gets the job done.
  267.  
  268. Of special interest is the function named monitor().  This 
  269. function examines the video mode through use of a DOS command and 
  270. if it is a 7, it assumes it is a monochrome monitor, otherwise it 
  271. assumes a color monitor.  The colors of the various fields are 
  272. established at this time and used throughout the program.  Most 
  273. of the data is written directly to the video memory, but some is 
  274. written through the standard BIOS routines.
  275.  
  276.  
  277. WHERE DO I GO FROM HERE?
  278. -----------------------------------------------------------------
  279. Although the C programming language is actually a very small 
  280. language, considering the number of constructs that are 
  281. available, it is extremely powerful.  Having completed this 
  282. course, you are ready to begin a very interesting journey in 
  283. programming, and the best way to get started is to actually use 
  284. the language.  Make up a program that you would find useful and 
  285. begin to develop it immediately.  Because C is so new to you, you 
  286. will find roadblocks as you progress, but with the plethora of 
  287. books available on nearly any part of software development, you 
  288.  
  289.                                                         Page 14-5
  290.  
  291.                                     Chapter 14 - Example Programs
  292.  
  293. will find help along the way and will achieve great satisfaction 
  294. as you complete each step.
  295.  
  296. Because the software development world is leaning heavily toward 
  297. C++ and object oriented programming, I highly recommend that you 
  298. begin a study of these topics, but not until you gain a little 
  299. experience with C.  C++ is actually a new way to package C code 
  300. in such a way that errors in the code are reduced, and the 
  301. program is much more understandable and maintainable.  C++ uses 
  302. all of the operations available in C and adds many new and 
  303. extremely useful operations.  C++ is also a much more complex 
  304. language than C, but the benefits far outweigh the effort 
  305. required to learn it.
  306.  
  307. Because many programmers have no idea of where to begin using a 
  308. new programming language, a few recommendations are in order for 
  309. first projects.  These projects are selected in such a way that 
  310. they can be useful but not too ambitious for beginning.  They are 
  311. not trivial and there are no solutions to them in the ANSWERS 
  312. directory.
  313.  
  314. 1.  Write a program to store up to 100 names, addresses, and 
  315.     phone numbers of your friends and relatives.  This list can 
  316.     be stored to a file, read from the file, or printed for a 
  317.     hardcopy listing in a format that could be easily folded and 
  318.     carried in a ladies purse.
  319.  
  320. 2.  Improve the above program so that it will store any number of 
  321.     names by storing the data in a linked list.  The list should 
  322.     be sortable.
  323.  
  324. 3.  Write a program to play TIC-TAC-TOE interactively.
  325.  
  326. 4.  Write a program that reads in a C source file and counts the 
  327.     lines that have comments only, those that are blank, and the 
  328.     total number of lines in the file.  The results can be listed 
  329.     on the monitor.  The most interesting result will be the 
  330.     number of lines of non-comment source code (NCSC) which is 
  331.     calculated easily from the above information.
  332.  
  333. 5.  Improve the above program to read in multiple source files 
  334.     and combine the results to achieve the NCSC lines for an 
  335.     entire project.
  336.  
  337. By this time you should be developing some ideas for another 
  338. project.  The best advice I can give you toward gaining 
  339. experience with C is to simply program in C.
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.                                                         Page 14-6
  348.